-
Notifications
You must be signed in to change notification settings - Fork 2.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improved selection placement when emoji is typed #22827
Improved selection placement when emoji is typed #22827
Conversation
@aimane-chnaif Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
Looks like there is a problem with selection in native devices, controlled selection is not working in android and ios apps, that's why we cannot control cursor correctly. I found this issue which talks about selection not working in android - #12854 |
Android controlled selection is very buggy at the moment. I can confirm that this also happens on main android.mov |
@alitoshmatov have you found any known E/App GH that iOS controlled selection is not working? |
@aimane-chnaif No I couldn't find similar issue for ios |
I also tested all other solutions on iOS and none of them working. |
Reviewer Checklist
Screenshots/VideosWebhello-smhilea-.movtest-smhahaile-.movpaste.movmention.movMobile Web - Chromemchrome.movMobile Web - Safarimsafari.movDesktopdesktop.moviOSios.movAndroidandroid.mov |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@MariaHCD all yours!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's make the function docs and name a bit more clear. I've posted my suggestions but open to your opinions as well!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice!
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
🚀 Deployed to staging by https://github.com/MariaHCD in version: 1.3.42-0 🚀
|
🚀 Deployed to production by https://github.com/jasperhuangg in version: 1.3.42-26 🚀
|
const newState = { | ||
isCommentEmpty: !!newComment.match(/^(\s)*$/), | ||
value: newComment, | ||
}; | ||
if (comment !== newComment) { | ||
const remainder = prevState.value.slice(prevState.selection.end).length; | ||
const remainder = ComposerUtils.getCommonSuffixLength(comment, newComment); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Coming from #27195, this has caused a small inconsistency between the composer when sending a message and when editing it.
We should have used the same calculation for the remainder (getCommonSuffixLength
) in ReportActionItemMessageEdit
too.
Details
Introduced
getCommonSuffixLength
and improved current logic of placing cursor after emoji is typedFixed Issues
$ #17275
PROPOSAL: #17275 (comment)
Tests
:smmile:
and move your cursor after secondm
and remove it to place your cursor in the middle of text when emoji name is completedOffline tests
Same as tests
QA Steps
Same as tests
PR Author Checklist
### Fixed Issues
section aboveTests
sectionOffline steps
sectionQA steps
sectiontoggleReport
and notonIconClick
)myBool && <MyComponent />
.src/languages/*
files and using the translation methodWaiting for Copy
label for a copy review on the original GH to get the correct copy.STYLE.md
) were followedAvatar
, I verified the components usingAvatar
are working as expected)/** comment above it */
this
properly so there are no scoping issues (i.e. foronClick={this.submit}
the methodthis.submit
should be bound tothis
in the constructor)this
are necessary to be bound (i.e. avoidthis.submit = this.submit.bind(this);
ifthis.submit
is never passed to a component event handler likeonClick
)StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)
)Avatar
is modified, I verified thatAvatar
is working as expected in all cases)ScrollView
component to make it scrollable when more elements are added to the page.main
branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTest
steps.Screenshots/Videos
Web
web-emoji.mov
Mobile Web - Chrome
mWeb-emoji.mp4
Mobile Web - Safari
safari-emoji.mp4
Desktop
desktop-emoji.mov
iOS
ios-emoji.mp4
Android
android-emoji.mp4